package gui.estudiante;

import java.awt.Color;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.SystemColor;
import java.awt.event.KeyEvent;
import java.awt.print.PrinterException;

import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.border.TitledBorder;
import javax.swing.table.TableRowSorter;

import modelo.ModeloEstudiante;
import javax.swing.JCheckBox;

public class PanelEstudiante extends JPanel {

	private static final long serialVersionUID = 1L;
	private JPanel panelTableEstudiante = null;
	private JScrollPane jspEstudiante = null;
	private JTable tblEstudiante = null;
	private JButton btnAgregar = null;
	private JButton btnModificar = null;
	private JButton btnEliminar = null;
	private JPanel panelBuscar = null;
	private JLabel lblBuscar = null;
	private JComboBox cmbBuscar = null;
	private JTextField txtBuscar = null;
	private ModeloEstudiante modeloEstudiante = null;
	private int indiceComboBuscar = 0;
	private DialogoAgregarEstudiante dialogoAgregar;
	private DialogoModificarEstudiante dialogoModificar;
	private JCheckBox checkBoxActivo = null;
	private JCheckBox checkBoxInactivo = null;
	private JCheckBox checkBoxTodosEstudiantes = null;
	private JButton btnInsertarEstudianteCurso = null;
	private static int idEstudiante = 0;
	private JButton btnImprimir = null;

	/**
	 * This is the default constructor
	 */
	public PanelEstudiante() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(884, 378);
		this.setLayout(null);
		modeloEstudiante = ModeloEstudiante.getInstancia();
		this.add(getPanelTableEstudiante(), null);
		this.add(getBtnAgregar(), null);
		this.add(getBtnModificar(), null);
		this.add(getBtnEliminar(), null);
		this.add(getPanelBuscar(), null);
		this.add(getCheckBoxActivo(), null);
		this.add(getCheckBoxInactivo(), null);
		this.add(getCheckBoxTodosEstudiantes(), null);
		this.add(getBtnInsertarEstudianteCurso(), null);
		this.add(getBtnImprimir(), null);
		this.dialogoAgregar = new DialogoAgregarEstudiante(null);
		this.dialogoModificar = new DialogoModificarEstudiante(null);
	}

	/**
	 * This method initializes panelTableCiclo
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getPanelTableEstudiante() {
		if (panelTableEstudiante == null) {
			panelTableEstudiante = new JPanel();
			panelTableEstudiante.setLayout(null);
			panelTableEstudiante.setBounds(new Rectangle(6, 90, 871, 227));
			panelTableEstudiante.setBorder(BorderFactory.createTitledBorder(
					BorderFactory.createLineBorder(SystemColor.controlText, 1),
					"Lista Esudiantes", TitledBorder.DEFAULT_JUSTIFICATION,
					TitledBorder.DEFAULT_POSITION, new Font("Dialog",
							Font.BOLD, 14), SystemColor.controlText));
			panelTableEstudiante.add(getJspEstudiante(), null);
		}
		return panelTableEstudiante;
	}

	/**
	 * This method initializes jspCiclo
	 * 
	 * @return javax.swing.JScrollPane
	 */
	private JScrollPane getJspEstudiante() {
		if (jspEstudiante == null) {
			jspEstudiante = new JScrollPane();
			jspEstudiante.setBounds(new Rectangle(12, 25, 850, 185));
			jspEstudiante.setViewportView(getTblEstudiante());
		}
		return jspEstudiante;
	}

	/**
	 * This method initializes tblCiclo
	 * 
	 * @return javax.swing.JTable
	 */
	private JTable getTblEstudiante() {
		if (tblEstudiante == null) {
			tblEstudiante = new JTable(modeloEstudiante);
		}
		return tblEstudiante;
	}

	/**
	 * This method initializes btnAgregar
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBtnAgregar() {
		if (btnAgregar == null) {
			btnAgregar = new JButton();
			btnAgregar.setBounds(new Rectangle(149, 331, 108, 33));
			btnAgregar.setText("Agregar");
			btnAgregar.setIcon(new ImageIcon("./lib/images/add.png"));
			btnAgregar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					dialogoAgregar.setVisible(true);
				}
			});
		}
		return btnAgregar;
	}

	/**
	 * This method initializes btnModificar
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBtnModificar() {
		if (btnModificar == null) {
			btnModificar = new JButton();
			btnModificar.setBounds(new Rectangle(268, 331, 108, 33));
			btnModificar.setText("Modificar");
			btnModificar.setIcon(new ImageIcon("./lib/images/modify.png"));
			btnModificar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					if (tblEstudiante.isRowSelected(tblEstudiante
							.getSelectedRow()) == false) {
						JOptionPane.showMessageDialog(null,
								"Seleccione el Estudiante a Modificar");
					} else {
						int id = Integer.parseInt(tblEstudiante.getValueAt(
								tblEstudiante.getSelectedRow(), 0).toString());
						dialogoModificar.setIdModificar(id);
						dialogoModificar.llenarCampos();
						dialogoModificar.setVisible(true);

					}
				}
			});
		}
		return btnModificar;
	}

	/**
	 * This method initializes btnEliminar
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBtnEliminar() {
		if (btnEliminar == null) {
			btnEliminar = new JButton();
			btnEliminar.setBounds(new Rectangle(387, 331, 149, 33));
			btnEliminar.setText("Cambiar Estatus");
			btnEliminar.setIcon(new ImageIcon("./lib/images/change.png"));
			btnEliminar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					if (tblEstudiante.isRowSelected(tblEstudiante
							.getSelectedRow()) == false) {
						JOptionPane
								.showMessageDialog(null,
										"Debe seleccionar un Estudiante para cambiarle es Estatus");
					} else {
						int opcion = JOptionPane
								.showConfirmDialog(
										null,
										"<html>Esta seguro que desea cambiarle<br> el Estatus al Empleado ?</html>",
										"", JOptionPane.YES_NO_OPTION);
						if (opcion == JOptionPane.YES_OPTION) {

							int id = Integer.parseInt(tblEstudiante.getValueAt(
									tblEstudiante.getSelectedRow(), 0)
									.toString());

							modeloEstudiante.cambiarEstatus(id);
							JOptionPane
									.showMessageDialog(
											null,
											"Estatus del estudiante Cambiado con Exito",
											"Atencion",
											JOptionPane.INFORMATION_MESSAGE);
						}
					}
				}
			});
		}
		return btnEliminar;
	}

	/**
	 * This method initializes panelBuscar
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getPanelBuscar() {
		if (panelBuscar == null) {
			lblBuscar = new JLabel();
			lblBuscar.setBounds(new Rectangle(10, 21, 55, 23));
			lblBuscar.setText("Buscar:");
			panelBuscar = new JPanel();
			panelBuscar.setLayout(null);
			panelBuscar.setBounds(new Rectangle(255, 18, 445, 58));
			panelBuscar.setBorder(BorderFactory.createTitledBorder(
					BorderFactory.createLineBorder(Color.black, 1), "Busqueda",
					TitledBorder.DEFAULT_JUSTIFICATION,
					TitledBorder.DEFAULT_POSITION, new Font("SansSerif",
							Font.PLAIN, 12), Color.black));
			panelBuscar.add(lblBuscar, null);
			panelBuscar.add(getCmbBuscar(), null);
			panelBuscar.add(getTxtBuscar(), null);
		}
		return panelBuscar;
	}

	/**
	 * This method initializes cmbBuscar
	 * 
	 * @return javax.swing.JComboBox
	 */
	private JComboBox getCmbBuscar() {
		if (cmbBuscar == null) {
			cmbBuscar = new JComboBox();
			cmbBuscar.setBounds(new Rectangle(67, 21, 151, 23));
			cmbBuscar.setModel(new DefaultComboBoxModel(new String[] {
					"ID Estudiante", "Nombre", "Apellido", "Telefono" }));
			cmbBuscar.addItemListener(new java.awt.event.ItemListener() {
				public void itemStateChanged(java.awt.event.ItemEvent e) {
					indiceComboBuscar = cmbBuscar.getSelectedIndex();
				}
			});
		}
		return cmbBuscar;
	}

	/**
	 * This method initializes txtBuscar
	 * 
	 * @return javax.swing.JTextField
	 */
	private JTextField getTxtBuscar() {
		if (txtBuscar == null) {
			txtBuscar = new JTextField();
			txtBuscar.setBounds(new Rectangle(221, 21, 210, 23));
			txtBuscar.addKeyListener(new java.awt.event.KeyAdapter() {
				public void keyReleased(java.awt.event.KeyEvent e) {
					if (e.getKeyCode() == KeyEvent.VK_BACK_SLASH) {
						getTxtBuscar().setText("");
					}
					TableRowSorter<ModeloEstudiante> sorter = new TableRowSorter<ModeloEstudiante>(
							modeloEstudiante);
					tblEstudiante.setRowSorter(sorter);
					sorter.setRowFilter(RowFilter.regexFilter("(?i)"
							.concat(getTxtBuscar().getText()),
							indiceComboBuscar));// Aqui es donde usamos el
					// indiceComboBox para que sepa
					// que indice del comboBox fue
					// seleccionado y haga la
					// busqueda por ahy

				}
			});

		}
		return txtBuscar;
	}

	/**
	 * This method initializes checkBoxActivo
	 * 
	 * @return javax.swing.JCheckBox
	 */
	private JCheckBox getCheckBoxActivo() {
		if (checkBoxActivo == null) {
			checkBoxActivo = new JCheckBox();
			checkBoxActivo.setBounds(new Rectangle(709, 20, 156, 23));
			checkBoxActivo.setText("Estudiantes Activos");
			checkBoxActivo.setName("ACTIVO");
			checkBoxActivo
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							if (checkBoxActivo.isSelected() == true) {
								checkBoxInactivo.setSelected(false);
								checkBoxTodosEstudiantes.setSelected(false);
								modeloEstudiante
										.actualizarTableParametros(checkBoxActivo
												.getName());
							}
						}
					});
		}
		return checkBoxActivo;
	}

	/**
	 * This method initializes checkBoxInactivo
	 * 
	 * @return javax.swing.JCheckBox
	 */
	private JCheckBox getCheckBoxInactivo() {
		if (checkBoxInactivo == null) {
			checkBoxInactivo = new JCheckBox();
			checkBoxInactivo.setBounds(new Rectangle(709, 39, 156, 23));
			checkBoxInactivo.setText("Estudiantes Inactivos");
			checkBoxInactivo.setName("INACTIVO");
			checkBoxInactivo
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							if (checkBoxInactivo.isSelected() == true) {
								checkBoxActivo.setSelected(false);
								checkBoxTodosEstudiantes.setSelected(false);
								modeloEstudiante
										.actualizarTableParametros(checkBoxInactivo
												.getName());
							}
						}
					});
		}
		return checkBoxInactivo;
	}

	/**
	 * This method initializes checkBoxTodosEstudiantes
	 * 
	 * @return javax.swing.JCheckBox
	 */
	private JCheckBox getCheckBoxTodosEstudiantes() {
		if (checkBoxTodosEstudiantes == null) {
			checkBoxTodosEstudiantes = new JCheckBox();
			checkBoxTodosEstudiantes.setBounds(new Rectangle(709, 58, 156, 23));
			checkBoxTodosEstudiantes.setText("Todos los Estudiantes");
			checkBoxTodosEstudiantes.setName("TODOS");
			checkBoxTodosEstudiantes
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							if (checkBoxTodosEstudiantes.isSelected() == true) {
								checkBoxInactivo.setSelected(false);
								checkBoxActivo.setSelected(false);
								modeloEstudiante
										.actualizarTableParametros(checkBoxTodosEstudiantes
												.getName());
							}
						}
					});
		}
		return checkBoxTodosEstudiantes;
	}

	/**
	 * This method initializes btnInsertarEstudianteCurso
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBtnInsertarEstudianteCurso() {
		if (btnInsertarEstudianteCurso == null) {
			btnInsertarEstudianteCurso = new JButton();
			btnInsertarEstudianteCurso.setBounds(new Rectangle(548, 332, 226,
					33));
			btnInsertarEstudianteCurso
					.setText("Insertar estudiante a un Curso");
			btnInsertarEstudianteCurso.setIcon(new ImageIcon(
					"./lib/images/insert.png"));
			btnInsertarEstudianteCurso
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							if (tblEstudiante.isRowSelected(tblEstudiante
									.getSelectedRow()) == false) {
								JOptionPane
										.showMessageDialog(null,
												"Debe seleccionar un Estudiante para agregarlo a algun Curso");
							} else {
								setIdEstudiante(Integer.parseInt(tblEstudiante
										.getValueAt(
												tblEstudiante.getSelectedRow(),
												0).toString()));

								new DialogoEstudianteCurso(null)
										.setVisible(true);

							}
						}
					});
		}
		return btnInsertarEstudianteCurso;
	}

	public static int getIdEstudiante() {
		return idEstudiante;
	}

	public static void setIdEstudiante(int idEstudiante) {
		PanelEstudiante.idEstudiante = idEstudiante;
	}

	/**
	 * This method initializes btnImprimir	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtnImprimir() {
		if (btnImprimir == null) {
			btnImprimir = new JButton();
			btnImprimir.setBounds(new Rectangle(20, 54, 189, 28));
			btnImprimir.setText("Imprimir Lista Estudiantes");
			btnImprimir.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
				try {
					tblEstudiante.print();
					} catch (PrinterException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				}
			});
		}
		return btnImprimir;
	}
} // @jve:decl-index=0:visual-constraint="55,15"
